package com.yu.util;

import java.util.Date;
import java.util.Properties;

import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class MailUtil {
	private String host = "smtp.163.com";// smtp服务器

	private int port = 25; // 服务端口

	private String smtp = "smtp"; // 发送协议

	private String userfrom;// 用户名--就是邮箱地址@之前的部分

	private String pwd;// 密码--邮箱密码

	private String to;// 收件人地址

	private String subject;// 邮件标题

	private int TYPE_HTML = 1; // html格式

	private int TYPE_TEXT = 2; // 文本格式

	/**
	 * 
	 * 设置服务器的配置参数
	 * 
	 * @param host
	 * @param port
	 * @param smtp
	 * @see [类、类#方法、类#成员]
	 */
	public void setMailServer(String host, int port, String smtp) {
		this.host = host;
		this.port = port;
		this.smtp = smtp;
	}

	/**
	 * 
	 * 设置邮箱账号
	 * 
	 * @param user
	 * @param pwd
	 * @see [类、类#方法、类#成员]
	 */
	public void setUserAccount(String userfrom, String pwd) {
		this.userfrom = userfrom;
		this.pwd = pwd;
	}

	/**
	 * 
	 * 设置邮箱发送地址
	 * 
	 * @param from
	 * @param to
	 * @param subject
	 * @see [类、类#方法、类#成员]
	 */
	public void setAddress(String to, String subject) {

		this.to = to;
		this.subject = subject;
	}

	/**
	 * 
	 * 发送文本形式的邮件
	 * 
	 * @param content
	 * @see [类、类#方法、类#成员]
	 */
	public void sendTextMail(String content) {
		send(content, TYPE_TEXT);
	}

	/**
	 * 
	 * 发送html格式的邮件
	 * 
	 * @param content
	 * @see [类、类#方法、类#成员]
	 */
	public void sendHtmlMail(String content) {
		send(content, TYPE_HTML);
	}

	/**
	 * 
	 * 发送html格式邮件
	 * 
	 * @param content
	 * @see [类、类#方法、类#成员]
	 */
	public void send(String content, int type) {

		try {
			// 建立邮件会话
			Properties props = new Properties(); // 用来在一个文件中存储键-值对的，其中键和值是用等号分隔的，

			// 存储发送邮件服务器的信息
			props.put("mail.smtp.host", host);
			// 同时通过验证
			props.put("mail.smtp.auth", "true");

			// 根据属性新建一个邮件会话
			Session s = Session.getInstance(props);
			// 有他会打印一些调试信息。
			s.setDebug(true);

			// 由邮件会话新建一个消息对象
			MimeMessage message = new MimeMessage(s);
			// 设置邮件
			InternetAddress addressfrom = new InternetAddress(userfrom); // pukeyouxintest2@163.com
			message.setFrom(addressfrom); // 设置发件人的地址

			// 设置收件人,并设置其接收类型为TO
			InternetAddress addressTo = new InternetAddress(to); // pukeyouxintest3@163.com
			message.setRecipient(Message.RecipientType.TO, addressTo);
			// 设置主题
			message.setSubject(subject); // java学习

			if (type == TYPE_HTML) {
				message.setContent(content, "text/html;charset=utf-8"); // 发送HTML邮件
			} else {
				message.setText(content); // 发送文本邮件
			}

			// 设置发信时间
			message.setSentDate(new Date());
			// 存储邮件信息
			message.saveChanges();

			// 发送邮件
			Transport transport = s.getTransport(smtp);
			// 以smtp方式登录邮箱,第一个参数是发送邮件用的邮件服务器SMTP地址,第二个参数为用户名,第三个参数为密码
			transport.connect(host, port, userfrom, pwd);

			// 发送邮件,其中第二个参数是所有已设好的收件人地址
			transport.sendMessage(message, message.getAllRecipients());
			transport.close();

		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	public static void main(String[] args) {
		MailUtil mailUtil = new MailUtil();
		mailUtil.setUserAccount("medsuda@163.com", "9625141.3");
		mailUtil.setAddress("892653986@qq.com", "subject" + TimeUtil.getCurrDate());
		mailUtil.sendHtmlMail("<a href='http://www.baidu.com/'>点击进入百度</a>");
		System.out.println("123");
	}

}
